home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpgfx / source / lgfxvsag.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-25  |  3.1 KB  |  191 lines

  1.  
  2. // lgfxvsag.cpp
  3. //
  4. // Copyright (c) 1995 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #include "stdgfx.h"
  7. #include "lgfxvsa.h"
  8.  
  9. LONG ScreenWd;
  10. LONG ScreenHt;
  11. LONG ScreenLen;
  12. LONG BankNumber;
  13.  
  14. LONG vSrcWd;
  15. LONG vSrcHt;
  16.  
  17. #ifdef __FORx86__
  18. // EDX = Bank Number
  19. #define SetBank __asm \
  20. { \
  21.   __asm push AX \
  22.   __asm push BX \
  23.   __asm push EDX \
  24.   __asm xor  BX, BX \
  25.   __asm mov  EDX, BankNumber \
  26.   __asm mov  AX, 0x4F05 \
  27.   __asm int  0x10 \
  28.   __asm pop  EDX \
  29.   __asm pop  BX \
  30.   __asm pop  AX \
  31. }
  32. #endif
  33.  
  34. // VOID SetVESASelector ( SHORT Selector )
  35. // EAX = Selector
  36.  
  37. VOID SetVESASelector ( SHORT Selector )
  38. {
  39.   if (Selector)
  40.     {}    
  41. } // End of SetVESASelector
  42.  
  43.  
  44. // VOID SetVESAData ( LONG SrcWidth, LONG SrcHeight, LONG SrcLen )
  45. // EAX = SrcWidth, EDX = Srcheight, EBX = SrcLen
  46.  
  47. VOID SetVESAData ( LONG SrcWidth, LONG SrcHeight, LONG SrcLen )
  48. {
  49. #ifdef __FORx86__
  50. __asm {
  51.   pushad
  52.   
  53.   mov  EAX, SrcWidth
  54.   mov  EDX, SrcHeight
  55.   mov  EBX, SrcLen
  56.   mov  ScreenWd, EAX
  57.   mov  ScreenHt, EDX
  58.   mov  ScreenLen, EBX
  59.  
  60.   popad
  61. } // End asm
  62. #endif
  63. } // End of SetVESAData 
  64.  
  65. // VOID VESACopy256To256 ( BYTE *Src, LONG AddSrc, LONG SrcWd, LONG SrcHt,
  66. //                         LONG DestCx, LONG DestCy )
  67. //
  68. // EAX = Src, EDX = AddSrc, EBX = SrcWd, ECX = SrcHt
  69.  
  70. VOID VESACopy256To256 ( BYTE *Src, LONG AddSrc, LONG SrcWidth, LONG SrcHeight,
  71.                         LONG DestCx, LONG DestCy )
  72. {
  73. if (Src)
  74.   {}
  75. if (AddSrc)
  76.   {}
  77. if (SrcWidth)
  78.   {}
  79. if (SrcHeight)
  80.   {}
  81. if (DestCx)
  82.   {}
  83. if (DestCy)
  84.   {}
  85. #ifdef __FORx86__
  86. __asm {
  87.   pushad
  88.  
  89.   mov  EAX, Src
  90.   mov  EDX, AddSrc
  91.   mov  EBX, SrcWidth
  92.   mov  ECX, SrcHeight
  93.     
  94.   mov  ESI, EAX   // ESI = Src
  95.   mov  vSrcWd, EBX
  96.   mov  vSrcHt, ECX
  97.   
  98.   sub  EDX, EBX
  99.   mov  EBX, EDX   // EBX = AddSrc - SrcWd
  100.  
  101.   mov  EDI, 0A0000h
  102.   mov  EAX, DestCy
  103.   mov  EDX, ScreenLen
  104.   mul  DX  
  105.   add  EAX, DestCx
  106.   adc  EDX, 0        // EDX is the Bank Number
  107.   and  EAX, 0FFFFh
  108.   mov  BankNumber, EDX
  109.   
  110.   SetBank 
  111.   
  112.   add  EDI, EAX
  113.   
  114.   mov  EDX, ScreenLen
  115.   sub  EDX, vSrcWd
  116.   cld
  117.  
  118.   Copy256OutLoop :
  119.     mov ECX, vSrcWd
  120.     mov EAX, ECX
  121.     and EAX, 03h
  122.     shr ECX, 2
  123.     rep movsd
  124.     mov ECX, EAX
  125.     rep movsb
  126.     add ESI, EBX
  127.     add DI, DX
  128.     jnc DoNext
  129.       inc BankNumber
  130.       SetBank 
  131.     
  132.     DoNext :
  133.       dec vSrcHt
  134.     jnz Copy256OutLoop
  135.  
  136.   popad
  137. } // End asm
  138. #endif
  139. } // End of VESACopy256To256
  140.  
  141.  
  142. // VOID VESAClear256 ( BYTE Color )
  143. //
  144. // EAX = Color
  145.  
  146. VOID VESAClear256 ( BYTE Color )
  147. {
  148. if (Color)
  149.   {}
  150. #ifdef __FORx86__
  151. __asm {
  152.   pushad
  153.   
  154.   mov  AL, Color
  155.   mov  AH, AL
  156.   mov  CX, AX
  157.   shl  EAX, 16  
  158.   mov  AX, CX
  159.   
  160.   mov  EDI, 0A0000h
  161.   mov  BankNumber, 0
  162.   
  163.   SetBank 
  164.   
  165.   mov  EDX, ScreenLen
  166.   sub  EDX, ScreenWd
  167.   mov  ESI, ScreenHt
  168.   cld
  169.  
  170.   Clear256OutLoop :
  171.     mov ECX, ScreenWd
  172.     mov EBX, ECX
  173.     and EBX, 03h
  174.     shr ECX, 2
  175.     rep stosd
  176.     mov ECX, EBX
  177.     rep stosb
  178.     add DI, DX
  179.     jnc DoNextClear
  180.       inc BankNumber
  181.       SetBank 
  182.     
  183.     DoNextClear :
  184.       dec ESI
  185.     jnz Clear256OutLoop
  186.  
  187.   popad
  188. } // End asm
  189. #endif
  190. } // End of VESAClear256
  191.